// package com.zee.springtest.utils;
//
// import java.util.Collection;
// import java.util.List;
// import java.util.Set;
//
// import org.springframework.beans.BeansException;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.context.ApplicationContext;
// import org.springframework.context.ApplicationContextAware;
// import org.springframework.context.ApplicationEventPublisher;
// import org.springframework.data.convert.EntityReader;
// import org.springframework.data.geo.GeoResults;
// import org.springframework.data.mongodb.core.BulkOperations;
// import org.springframework.data.mongodb.core.BulkOperations.BulkMode;
// import org.springframework.data.mongodb.core.CollectionOptions;
// import org.springframework.data.mongodb.core.DbCallback;
// import org.springframework.data.mongodb.core.DocumentCallbackHandler;
// import org.springframework.data.mongodb.core.FindAndModifyOptions;
// import org.springframework.data.mongodb.core.IndexOperations;
// import org.springframework.data.mongodb.core.MongoOperations;
// import org.springframework.data.mongodb.core.ScriptOperations;
// import org.springframework.data.mongodb.core.aggregation.Aggregation;
// import org.springframework.data.mongodb.core.aggregation.AggregationResults;
// import org.springframework.data.mongodb.core.aggregation.Fields;
// import org.springframework.data.mongodb.core.aggregation.TypedAggregation;
// import org.springframework.data.mongodb.core.convert.MongoConverter;
// import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent;
// import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent;
// import org.springframework.data.mongodb.core.mapping.event.MongoMappingEvent;
// import org.springframework.data.mongodb.core.mapreduce.GroupBy;
// import org.springframework.data.mongodb.core.mapreduce.GroupByResults;
// import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
// import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
// import org.springframework.data.mongodb.core.query.Criteria;
// import org.springframework.data.mongodb.core.query.NearQuery;
// import org.springframework.data.mongodb.core.query.Query;
// import org.springframework.data.mongodb.core.query.Update;
// import org.springframework.data.util.CloseableIterator;
// import org.springframework.util.Assert;
//
// import com.mongodb.BasicDBObject;
// import com.mongodb.CommandResult;
// import com.mongodb.DBCollection;
// import com.mongodb.DBObject;
// import com.mongodb.ReadPreference;
// import com.mongodb.WriteResult;
//
// public class MyMongoTmplate implements MongoOperations,
// ApplicationContextAware {
// @Autowired
// private ApplicationEventPublisher eventPublisher;
//
// //
// ------------------------------------------------------------------------------------------
// protected <T> void maybeEmitEvent(MongoMappingEvent<T> event) {
// if (null != eventPublisher) {
// eventPublisher.publishEvent(event);
// }
// }
//
// interface DbObjectCallback<T> {
//
// T doWith(DBObject object);
// }
//
// /**
// * Simple {@link DbObjectCallback} that will transform {@link DBObject} into
// * the given target type using the given {@link MongoReader}.
// *
// * @author Oliver Gierke
// * @author Christoph Strobl
// */
// private class ReadDbObjectCallback<T> implements DbObjectCallback<T> {
//
// private final EntityReader<? super T, DBObject> reader;
// private final Class<T> type;
// private final String collectionName;
//
// public ReadDbObjectCallback(EntityReader<? super T, DBObject> reader,
// Class<T> type, String collectionName) {
//
// Assert.notNull(reader, "EntityReader must not be null!");
// Assert.notNull(type, "Entity type must not be null!");
//
// this.reader = reader;
// this.type = type;
// this.collectionName = collectionName;
// }
//
// public T doWith(DBObject object) {
// if (null != object) {
// maybeEmitEvent(new AfterLoadEvent<T>(object, type, collectionName));
// }
// T source = reader.read(type, object);
// if (null != source) {
// maybeEmitEvent(new AfterConvertEvent<T>(object, source, collectionName));
// }
// return source;
// }
// }
//
// class UnwrapAndReadDbObjectCallback<T> extends ReadDbObjectCallback<T> {
//
// public UnwrapAndReadDbObjectCallback(EntityReader<? super T, DBObject>
// reader, Class<T> type,
// String collectionName) {
// super(reader, type, collectionName);
// }
//
// @Override
// public T doWith(DBObject object) {
//
// Object idField = object.get(Fields.UNDERSCORE_ID);
//
// if (!(idField instanceof DBObject)) {
// return super.doWith(object);
// }
//
// DBObject toMap = new BasicDBObject();
// DBObject nested = (DBObject) idField;
// toMap.putAll(nested);
//
// for (String key : object.keySet()) {
// if (!Fields.UNDERSCORE_ID.equals(key)) {
// toMap.put(key, object.get(key));
// }
// }
//
// return super.doWith(toMap);
// }
// }
//
// @Override
// public <T> List<T> findAll(Class<T> entityClass, String collectionName) {
// return executeFindMultiInternal(new FindCallback(null), null,
// new ReadDbObjectCallback<T>(mongoConverter, entityClass, collectionName),
// collectionName);
// }
//
// @Override
// public void setApplicationContext(ApplicationContext arg0) throws
// BeansException {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public String getCollectionName(Class<?> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public CommandResult executeCommand(String jsonCommand) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public CommandResult executeCommand(DBObject command) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public CommandResult executeCommand(DBObject command, int options) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public CommandResult executeCommand(DBObject command, ReadPreference
// readPreference) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public void executeQuery(Query query, String collectionName,
// DocumentCallbackHandler dch) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public <T> T execute(DbCallback<T> action) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T execute(Class<?> entityClass, CollectionCallback<T> action) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T execute(String collectionName, CollectionCallback<T> action) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T executeInSession(DbCallback<T> action) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> CloseableIterator<T> stream(Query query, Class<T> entityType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> CloseableIterator<T> stream(Query query, Class<T> entityType,
// String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> DBCollection createCollection(Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> DBCollection createCollection(Class<T> entityClass,
// CollectionOptions collectionOptions) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public DBCollection createCollection(String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public DBCollection createCollection(String collectionName, CollectionOptions
// collectionOptions) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public Set<String> getCollectionNames() {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public DBCollection getCollection(String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> boolean collectionExists(Class<T> entityClass) {
// // TODO Auto-generated method stub
// return false;
// }
//
// @Override
// public boolean collectionExists(String collectionName) {
// // TODO Auto-generated method stub
// return false;
// }
//
// @Override
// public <T> void dropCollection(Class<T> entityClass) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void dropCollection(String collectionName) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public IndexOperations indexOps(String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public IndexOperations indexOps(Class<?> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public ScriptOperations scriptOps() {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public BulkOperations bulkOps(BulkMode mode, String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public BulkOperations bulkOps(BulkMode mode, Class<?> entityType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public BulkOperations bulkOps(BulkMode mode, Class<?> entityType, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> List<T> findAll(Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> GroupByResults<T> group(String inputCollectionName, GroupBy
// groupBy, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> GroupByResults<T> group(Criteria criteria, String
// inputCollectionName, GroupBy groupBy,
// Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation,
// String collectionName,
// Class<O> outputType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <O> AggregationResults<O> aggregate(TypedAggregation<?> aggregation,
// Class<O> outputType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <O> AggregationResults<O> aggregate(Aggregation aggregation, Class<?>
// inputType, Class<O> outputType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <O> AggregationResults<O> aggregate(Aggregation aggregation, String
// collectionName, Class<O> outputType) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String
// mapFunction, String reduceFunction,
// Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> MapReduceResults<T> mapReduce(String inputCollectionName, String
// mapFunction, String reduceFunction,
// MapReduceOptions mapReduceOptions, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> MapReduceResults<T> mapReduce(Query query, String
// inputCollectionName, String mapFunction,
// String reduceFunction, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> MapReduceResults<T> mapReduce(Query query, String
// inputCollectionName, String mapFunction,
// String reduceFunction, MapReduceOptions mapReduceOptions, Class<T>
// entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> GeoResults<T> geoNear(NearQuery near, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> GeoResults<T> geoNear(NearQuery near, Class<T> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findOne(Query query, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findOne(Query query, Class<T> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public boolean exists(Query query, String collectionName) {
// // TODO Auto-generated method stub
// return false;
// }
//
// @Override
// public boolean exists(Query query, Class<?> entityClass) {
// // TODO Auto-generated method stub
// return false;
// }
//
// @Override
// public boolean exists(Query query, Class<?> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return false;
// }
//
// @Override
// public <T> List<T> find(Query query, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> List<T> find(Query query, Class<T> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findById(Object id, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findById(Object id, Class<T> entityClass, String collectionName)
// {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndModify(Query query, Update update, Class<T> entityClass)
// {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndModify(Query query, Update update, Class<T> entityClass,
// String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndModify(Query query, Update update, FindAndModifyOptions
// options, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndModify(Query query, Update update, FindAndModifyOptions
// options, Class<T> entityClass,
// String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndRemove(Query query, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> T findAndRemove(Query query, Class<T> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public long count(Query query, Class<?> entityClass) {
// // TODO Auto-generated method stub
// return 0;
// }
//
// @Override
// public long count(Query query, String collectionName) {
// // TODO Auto-generated method stub
// return 0;
// }
//
// @Override
// public long count(Query query, Class<?> entityClass, String collectionName) {
// // TODO Auto-generated method stub
// return 0;
// }
//
// @Override
// public void insert(Object objectToSave) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void insert(Object objectToSave, String collectionName) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void insert(Collection<? extends Object> batchToSave, Class<?>
// entityClass) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void insert(Collection<? extends Object> batchToSave, String
// collectionName) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void insertAll(Collection<? extends Object> objectsToSave) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void save(Object objectToSave) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public void save(Object objectToSave, String collectionName) {
// // TODO Auto-generated method stub
//
// }
//
// @Override
// public WriteResult upsert(Query query, Update update, Class<?> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult upsert(Query query, Update update, String collectionName)
// {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult upsert(Query query, Update update, Class<?> entityClass,
// String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateFirst(Query query, Update update, Class<?>
// entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateFirst(Query query, Update update, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateFirst(Query query, Update update, Class<?>
// entityClass, String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateMulti(Query query, Update update, Class<?>
// entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateMulti(Query query, Update update, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult updateMulti(Query query, Update update, Class<?>
// entityClass, String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult remove(Object object) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult remove(Object object, String collection) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult remove(Query query, Class<?> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult remove(Query query, Class<?> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public WriteResult remove(Query query, String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> List<T> findAllAndRemove(Query query, String collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> List<T> findAllAndRemove(Query query, Class<T> entityClass) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public <T> List<T> findAllAndRemove(Query query, Class<T> entityClass, String
// collectionName) {
// // TODO Auto-generated method stub
// return null;
// }
//
// @Override
// public MongoConverter getConverter() {
// // TODO Auto-generated method stub
// return null;
// }
//
// }
